package com.shelpe.services.sinbad.readdao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.shelpe.services.sinbad.model.AdgroupWithRptAdgroupDto;
import com.shelpe.services.sinbad.model.KeywordEffectExample;
import com.shelpe.services.sinbad.model.KeywordID;
import com.shelpe.services.sinbad.model.RptKeyword;
import com.shelpe.services.sinbad.model.RptKeywordDto;
import com.shelpe.services.sinbad.model.RptKeywordExample;
import com.shelpe.services.sinbad.model.RptKeywordKey;

public interface ReadRptKeywordMapper {
	int countByExample(RptKeywordExample example);

	List<RptKeyword> selectByExample(RptKeywordExample example);

	RptKeyword selectByPrimaryKey(RptKeywordKey key);

	RptKeyword selectSumByExample(RptKeywordExample example);

	/**
	 * @description 当天质量得分是否同步
	 * 
	 * @param example
	 * @return
	 * @author letian@shelpe.com
	 * @date 2017年3月31日 上午10:59:10
	 */
	Integer countCurrdaySysScore(RptKeywordExample example);

	/**
	 * 分组获取关键词的ctr、roi
	 * 
	 * @param example
	 * @return
	 */
	List<RptKeyword> selectCtrRoiByExample(RptKeywordExample example);

	/**
	 * 获取ctr宝贝均值
	 * 
	 * @param example
	 * @return
	 */
	Map<Long, Float> selectAvgCtrByExample(RptKeywordExample example);

	/**
	 * 获取展现量
	 * 
	 * @param example
	 * @return
	 */
	List<RptKeyword> selectImpressionsByExample(RptKeywordExample example);

	/**
	 * 获取点击量
	 * 
	 * @param example
	 * @return
	 */
	List<RptKeyword> selectClickByExample(RptKeywordExample example);

	/**
	 * 获取质量得分
	 * 
	 * @param example
	 * @return
	 */
	List<RptKeyword> selectQscoreByExample(RptKeywordExample example);

	/**
	 * 指标摘要
	 * 
	 * @param example
	 * @return
	 */
	RptKeyword selectSummariesMetric(RptKeywordExample example);

	/**
	 * 指标摘要
	 * 
	 * @param example
	 * @return
	 */
	RptKeyword selectCampaignSummariesMetric(RptKeywordExample example);
	
	RptKeyword selectCampaignSummariesMetricNew(@Param("user_id") long userID,@Param("campaign_id") long campaignID, @Param("from") String from, @Param("to") String to,
			@Param("sources") String sources);

	/**
	 * 获取趋势图 数据 时间维度 以日期分组
	 * 
	 * @param example
	 * @return
	 */
	List<RptKeyword> selectReportsTrendByDate(RptKeywordExample example);

	/**
	 * 获取趋势图 数据 推广单元维度 推广计划级别 以推广组分组
	 * 
	 * @param example
	 * @return
	 */
	List<RptKeyword> selectReportsTrendByCampaignId(RptKeywordExample example);

	/**
	 * 获取趋势图 数据 推广单元维度 推广组级别 以关键词分组
	 * 
	 * @param example
	 * @return
	 */
	List<RptKeyword> selectReportsTrendByAdgroupId(RptKeywordExample example);

	/**
	 * 获取趋势图 数据 推广单元维度 用户级别 以推广计划分组
	 * 
	 * @param example
	 * @return
	 */
	List<RptKeyword> selectReportsTrendByUserId(RptKeywordExample example);

	/** 获取推广组信息and推广组效果数据分页信息 */
	List<AdgroupWithRptAdgroupDto> selectByAdgroupAndRptAdgroup(@Param("user_id") long userID,
			@Param("campaign_id") long campaignID, @Param("from") String from, @Param("to") String to,
			@Param("lower_limit") int lower, @Param("upper_limit") int upper,
			@Param("orderByClause") String orderByClause, @Param("sort") String sort, @Param("start") int start,
			@Param("end") int end, @Param("device") String device, @Param("title") String title);

	/** 获取推广组信息and推广组效果数据总数 */
	int countByAdgroupAndRptAdgroup(@Param("user_id") long userID, @Param("campaign_id") long campaignID,
			@Param("from") String from, @Param("to") String to, @Param("lower_limit") int lower,
			@Param("upper_limit") int upper, @Param("title") String title);

	/** 获取账户级别 宝贝级别 的均值 */
	RptKeyword reportUserAverage(@Param("user_id") long userID, @Param("adgroup_id") long adgroupID,
			@Param("from") String from, @Param("to") String to, @Param("lower_limit") int lower,
			@Param("upper_limit") int upper);

	/** 获取账户级别 宝贝级别 的均值 */
	RptKeyword reportMax(@Param("user_id") long userID, @Param("adgroup_id") long adgroupID, @Param("from") String from,
			@Param("to") String to, @Param("lower_limit") int lower, @Param("upper_limit") int upper);

	/** 获取账户级别 宝贝级别 的最值 */
	RptKeyword reportUserSum(@Param("user_id") long userID, @Param("adgroup_id") long adgroupID,
			@Param("from") String from, @Param("to") String to, @Param("lower_limit") int lower,
			@Param("upper_limit") int upper);

	List<RptKeyword> selectSummariesMetricByKeyword(RptKeywordExample example);

	List<KeywordID> selectIDsByExampleGroupByKeywordID(RptKeywordExample example);

	List<RptKeyword> selectByExampleGroupByKeywordID(RptKeywordExample example);

	List<RptKeyword> selectByExampleGroupByDate(RptKeywordExample example);

	List<RptKeywordDto> selectByKeywordAndRpt(KeywordEffectExample example);
}